class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {        
        int minSize = nums.size();
        int sum = 0;
        for (int i = 0; i < nums.size(); ++i) {
            sum += nums[i];
        }
        // 当且仅当所有数的和小于目标的时候，才会出现答案为0的情况
        if (sum < target) {
            return 0;
        }
        sum = 0;
        for (int right = 0, left = 0; right < nums.size(); ++right) {
            sum += nums[right];
            // 只有当满足条件的时候，才开始缩小窗口，缩小完成后才判断是否更新答案
            if (sum >= target) {
                // 只有当结果不满足条件的时候才会跳出循环
                while (sum >= target) {
                    sum -= nums[left];
                    left++;
                }
                // 因此这里需要加上前一个满足条件的答案
                int temp = right - left + 2;
                // 更新答案
                if (temp < minSize) {
                    minSize = temp;         
                }
            }          
        }

        return minSize;
    }
};